package org.jiuling.basics.validation;

import java.math.BigDecimal;

/**
 * 对象校验
 * @author 紫灵
 * @date 2021年09月09日 10时56分41秒
 */
public class ObjectVerify {

    /** 私有构造方法，禁止创建对象 */
    private ObjectVerify(){}

    /**
     * 是否为空
     * @param obj 对象
     * @return 是否为空
     */
    public static boolean isNull(Object obj){
        return obj == null;
    }

    /**
     * 是否是基础数据
     * @param obj 对象
     * @return 是否是基础数据
     */
    public static boolean isBaseType(Object obj){
        if(isNull(obj)){
            return false;
        }
        if(obj instanceof String ||
                obj instanceof Integer ||
                obj instanceof Short ||
                obj instanceof Long ||
                obj instanceof Float ||
                obj instanceof Double ||
                obj instanceof Boolean ||
                obj instanceof Character ||
                obj instanceof BigDecimal ||
                obj instanceof Number ||
                obj instanceof Byte){
            return true;
        }
        Class<?> clazz = obj.getClass();
        return clazz.equals(int.class) ||
                clazz.equals(byte.class) ||
                clazz.equals(long.class) ||
                clazz.equals(float.class) ||
                clazz.equals(double.class) ||
                clazz.equals(boolean.class) ||
                clazz.equals(char.class) ||
                clazz.equals(short.class);
    }

    /**
     * 基础类型是否为空白
     * @param object 对象
     * @return 是否为空白
     */
    public static boolean baseTypeIsBlank(Object object){
        if (isNull(object)) return true;

        // 判断是否为字符串，如果为字符串则做字符串校验
        if (object instanceof String str){
            return StringVerify.isBlank(str);
        }

        // 判断是否为整形数，如果为整形数则做整形数校验
        if (object instanceof Integer i){
            return IntegerVerify.isBlank(i);
        }

        // 判断是否为长整形数，如果为长整形数则做长整形数校验
        if (object instanceof Long l){
            return LongVerify.isBlank(l);
        }

        // 判断Short是否为空白
        if (object instanceof Short shor){
            return ShortVerify.isBlank(shor);
        }

        // 判断浮点行是否为空白
        if (object instanceof Float flot){
            return FloatVerify.isBlank(flot);
        }

        if (object instanceof Double doub){
            return DoubleVerify.isBlank(doub);
        }

        if (object instanceof BigDecimal bigDecimal){
            return BigDecimalVerify.isEmpty(bigDecimal);
        }

        if (object instanceof Number num){
            return NumberVerify.isBlank(num);
        }

        // 如果不为上述基础类型则返回false,不参与校验
        return false;
    }
}
